#include "GoldsteinPriceFunction.hpp"
#include <cmath>



void GoldsteinPriceFunction::operator()(Specimen &argument)
{
  double fx = (1.0 + pow(argument[0]+argument[1]+1.0,2)
	       *(19.0 - 14.0*argument[0] + 3.0*pow(argument[0],2) 
		 - 14.0*argument[1] + 6.0*argument[0]*argument[1] 
		 + 3.0*pow(argument[1],2)))
    *(30.0 + pow(2.0*argument[0]-3.0*argument[1],2)
      *(18.0 - 32.0*argument[0] + 12.0*pow(argument[0],2)+48.0*argument[1]
	-36.0*argument[0]*argument[1]+27.0*pow(argument[1],2)));
  argument.setFitness(fx);
}

/*
double goldstein_price(double x1, double x2)
{
	double fx = (1.0 + pow(x1+x2+1.0,2)*(19.0 - 14.0*x1 + 3.0*pow(x1,2) - 14.0*x2 + 6.0*x1*x2 + 3.0*pow(x2,2)))
		*(30.0 + pow(2.0*x1-3.0*x2,2)*(18.0 - 32.0*x1 + 12.0*pow(x1,2)+48.0*x2-36.0*x1*x2+27.0*pow(x2,2)));
	return fx;
}
*/
